Sqrt(x)¶
Time: O(LogN); Space: O(1); medium
Implement int sqrt(int x).
Compute and return the square root of x, where x is guaranteed to be a non-negative integer.
Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.
Example 1:
Input: 4
Output: 2
Example 2:
Input: 8
Output: 2
Explanation:
The square root of 8 is 2.82842…, and since the decimal part is truncated, 2 is returned.
Example 3:
Input: 0
Output: 0
Example 4:
Input: 3
Output: 1
Explanation:
Return the largest integer y that y*y <= x.
Hints:
Try exploring all integers.
Use the sorted property of integers to reduced the search space.
1. Binary Search [O(LogN),O(1)]¶
[6]:
class Solution1(object):
"""
Time: O(LogN)
Space: O(1)
"""
def mySqrt(self, x):
"""
:type x: int
:rtype: int
"""
if x < 2:
return x
left, right = 1, x // 2
while left <= right:
mid = left + (right - left) // 2
if mid > x // mid:
right = mid - 1
else:
left = mid + 1
return left - 1
[7]:
s = Solution1()
x = 4
assert s.mySqrt(x) == 2
x = 8
assert s.mySqrt(x) == 2
x = 0
assert s.mySqrt(x) == 0
x = 3
assert s.mySqrt(x) == 1